package com.kaoyaya.delivery.fragment;

import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;

/**
 * <pre>
 * 1.中间碎片的抽象父类,所有需要在中间显示的碎片必须继承此父类；
 * 2.在子碎片中必须要有个ViewPager控件，如果没有此控件,就不能实现手势滑动效果；
 * 3.必须把子类的ViewPager控件传给父类，通过调用父类的方法setViewPager(ViewPager mViewPager)；
 * 4.此外,选项卡切换的监听器已经定义，子类只需要设置此监听器，实现监听器调用的抽象方法。
 * </pre>
 * @date 2013-5-20
 * @author Goven
 * @email gxl3999@gmail.com
 */
public abstract class CenterFragment extends Fragment {

	private ViewPager mViewPager;
	/**
	 * 必须设置一个ViewPager，ViewPager是布局视图的一部分.
	 * @param layoutView 布局视图
	 * @author Goven
	 * @date 2013-5-20
	 */
	protected void setViewPager(ViewPager mViewPager) {
		this.mViewPager = mViewPager;
	}
	
	/**
	 * 是否第一页
	 * @author Goven
	 * @date 2013-5-19
	 */
	public boolean isFirst() {
		if (mViewPager.getCurrentItem() == 0)
			return true;
		else
			return false;
	}
	/**
	 * 是否最后一页
	 * @return
	 * @author Goven
	 * @date 2013-5-19
	 */
	public boolean isEnd() {
		if (mViewPager.getCurrentItem() == mViewPager.getAdapter().getCount() - 1)
			return true;
		else
			return false;
	}
	/**
	 * 页面被选中时调用此方法
	 * @param position 选中的页面位置
	 * @author Goven
	 * @date 2013-5-20
	 */
	protected abstract void onPageSelected(int position);
	
	protected ViewPager.OnPageChangeListener pageChangeListener = new ViewPager.OnPageChangeListener() {
		
		@Override
		public void onPageSelected(int position) {
			if (pageChangeCallback != null) {
				pageChangeCallback.onPageChanged(position);
			}
			CenterFragment.this.onPageSelected(position);
		}
		
		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) { }
		
		@Override
		public void onPageScrollStateChanged(int position) { }
	};
	
	/**
	 * ViewPager页面切换的回调,主要给调用者Activity使用
	 */
	public PageChangeCallback pageChangeCallback;
	/**
	 * 设置ViewPager页面切换的回调
	 * @param pageChangeCallback
	 * @author Goven
	 * @date 2013-5-20
	 */
	public void setPageChangeCallback(PageChangeCallback pageChangeCallback) {
		this.pageChangeCallback = pageChangeCallback;
	}

	public interface PageChangeCallback {
		public void onPageChanged(int position);
	}

}
